#ifndef GAMEROOM_H
#define GAMEROOM_H

#include <QWidget>
#include <QTimer>
#include <QSound>

//蛇的移动方向
enum class Direction
{
    UP = 1,
    DOWN,
    LEFT,
    RIGHT
};

enum class Difficulty
{
    simple = 1,
    mormal,
    hard
};

class gameRoom : public QWidget
{
    Q_OBJECT
public:
    explicit gameRoom(QWidget *parent = nullptr);

    //重写绘制事件绘制游戏房间的背景
    void paintEvent(QPaintEvent *event);

    //蛇的移动操作
    void moveTop();
    void moveDown();
    void moveLeft();
    void moveRight();

    //判断游戏是否结束
    bool isGameOver();

    //设置蛇的速度
    void setMovementSpeed(int speed);

    //设置游戏难度
    void setGameDifficulty(Difficulty difficulty);

    //转换游戏难度字符串
    QString convert(Difficulty difficulty);

private:
    Direction snakeDirection = Direction::UP; 	//蛇的移动方向，默认向上移动

    int snakeNodeWidget = 20; //蛇节点的宽度
    int snakeNodeHeight = 20; //蛇节点的长度

    int snakeMovementSpeed = 300; //蛇的移动速度

    QList<QRectF> snakeList; //蛇的链表，用来组织“蛇”

    QRectF *food; //食物
    int foodWidget = snakeNodeWidget; //食物的宽度
    int foodHeight = snakeNodeHeight; //食物的高度

    QTimer *timer; //定时器，移动蛇的操作就是通过定时器来完成

    bool isGameStart = false; //游戏是否开始
    bool GameOver = false; //是否死亡

    QSound *sound;//游戏背景音乐  由于在gameover的时候不能暂停，故定义成成员变量

    int count = 0; //为了解决绘制事件中往文件写入多次的问题

    Difficulty gameDifficulty = Difficulty::simple; //游戏难度
};

#endif // GAMEROOM_H
